package com.suse.service.community.mapper;

import com.suse.service.community.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 消息数据访问接口
 * </p>
 *
 * @author 辜玉彬
 * @since 2022-09-01 15:19
 */
@Mapper
public interface MessageMapper {

    /**
     * 查询会话列表(分页)
     * @param userId 用户ID
     * @param offset 偏移量
     * @param limit 限制条数
     * @return 会话列表
     */
    List<Message> selectConversationList(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit);

    /**
     * 查询会话总数
     * @param userId 用户ID
     * @return 会话总数
     */
    int selectConversationTotal(int userId);

    /**
     * 查询私信列表(分页)
     * @param conversationId 会话ID
     * @param offset 偏移量
     * @param limit 限制条数
     * @return 私信列表
     */
    List<Message> selectLetterList(@Param("conversationId") String conversationId, @Param("offset") int offset, @Param("limit") int limit);

    /**
     * 查询私信总数
     * @param conversitionId 会话ID
     * @return 私信总数
     */
    int selectLetterTotal(String conversitionId);

    /**
     * 查询会话未读私信总数
     * @param conversationId 会话ID
     * @return 会话未读私信总数
     */
    int selectConversationUnreadLetterCount(@Param("userId") int userId,@Param("conversationId") String conversationId);

    /**
     * 查询未读私信数
     * @param userId 用户ID
     * @return 所有未读私信数
     */
    int selectUnreadLetterCount(@Param("userId") int userId);

    /**
     * 插入消息
     * @param message 消息
     * @return 影响行数
     */
    int insert(Message message);

    /**
     * 批量修改消息的状态
     * @param idList 消息ID列表
     * @param status 状态
     * @return 影响行数
     */
    int updateStatus(@Param("idList") List<Integer> idList,@Param("status") int status);

    /**
     * 查询最新的通知
     * @param userId 用户ID
     * @param topic 主题
     * @return 最新的通知
     */
    Message selectLatestNotice(@Param("userId") int userId, @Param("topic") String topic);

    /**
     * 查询通知数
     * @param userId 用户ID
     * @param topic 主题
     * @return 通知数
     */
    int selectNoticeCount(@Param("userId") int userId, @Param("topic") String topic);

    /**
     * 查询未读主题通知数
     * @param userId 用户ID
     * @param topic 主题
     * @return 未读通知数
     */
    int selectUnreadTopicNoticeCount(@Param("userId") int userId, @Param("topic") String topic);

    /**
     * 查询未读通知数
     * @param userId 用户ID
     * @return 未读通知数
     */
    int selectUnreadNoticeCount(@Param("userId") int userId);


    /**
     * 查询主题通知列表(分页)
     * @param userId 用户ID
     * @param topic 主题
     * @param offset 偏移量
     * @param limit 限制行数
     * @return 主题通知列表
     */
    List<Message> selectTopicNoticeList(@Param("userId") int userId, @Param("topic") String topic, @Param("offset") int offset, @Param("limit") int limit);

    /**
     * 查询未读消息数
     * @return 未读消息数
     */
    int selectUnreadMessageCount(@Param("userId") int userId);

}
